// 在JavaScript中实现链表数据结构，首先需要定义节点（`ListNode`）和链表（`LinkedList`）两个类。节点类负责存储数据和指向下一个节点的引用，而链表类负责管理节点，提供添加、删除和查找节点的方法。以下是一个简单的实现示例：
// 节点类
class ListNode {
  constructor(value = null) {
    this.value = value;
    this.next = null;
  }
}
// 链表类
class LinkedList {
  constructor() {
    this.head = null;
    this.size = 0;
  }
  // 添加节点到链表末尾
  append(value) {
    const newNode = new ListNode(value);
    if (this.head === null) {
      this.head = newNode;
    } else {
      let current = this.head;
      while (current.next !== null) {
        current = current.next;
      }
      current.next = newNode;
    }
    this.size++;
  }
  // 在链表开头添加节点
  prepend(value) {
    const newNode = new ListNode(value);
    newNode.next = this.head;
    this.head = newNode;
    this.size++;
  }
  // 删除节点
  delete(value) {
    if (this.head === null) return;
    if (this.head.value === value) {
      this.head = this.head.next;
      this.size--;
      return;
    }
    let current = this.head;
    while (current.next !== null) {
      if (current.next.value === value) {
        current.next = current.next.next;
        this.size--;
        return;
      }
      current = current.next;
    }
  }
  // 查找节点
  find(value) {
    if (this.head === null) return null;
    let current = this.head;
    while (current !== null) {
      if (current.value === value) {
        return current;
      }
      current = current.next;
    }
    return null;
  }
  // 打印链表
  print() {
    let current = this.head;
    let str = '';
    while (current) {
      str += current.value + ' ';
      current = current.next;
    }
    console.log(str.trim());
  }
}
// 使用示例
const linkedList = new LinkedList();
linkedList.append(1);
linkedList.append(2);
linkedList.append(3);
linkedList.prepend(0);
linkedList.print(); // 输出: 0 1 2 3
linkedList.delete(2);
linkedList.print(); // 输出: 0 1 3
const foundNode = linkedList.find(1);
console.log(foundNode); // 输出: ListNode { value: 1, next: ListNode { value: 3, next: null } }
// 这个实现包括基本的添加、删除和查找节点的方法。`append` 方法在链表末尾添加节点，`prepend` 方法在链表开头添加节点，`delete` 方法删除具有特定值的节点，`find` 方法查找具有特定值的节点。`print` 方法用于打印链表中的所有值，以便于调试和展示。
